import { createRouter, createWebHistory } from 'vue-router'
import Layout from '../layout/index.vue'
import { ElMessage } from 'element-plus'

// 定义环境变量接口
interface ImportMeta {
  env: {
    BASE_URL: string;
  }
}

const router = createRouter({
  history: createWebHistory((import.meta as any).env.BASE_URL || '/'),
  routes: [
    {
      path: '/',
      name: 'login',
      component: () => import('../views/LoginView.vue'),
    },
    {
      path: '/login',
      redirect: '/',
    },
    {
      path: '/register',
      name: 'register',
      component: () => import('../views/RegisterView.vue'),//注册
    },
    {
      path: '/index',//主页
      name: 'home',
      component: Layout,
      redirect: '/index/dashboard',
      children: [
        {
          path: 'dashboard',
          name: 'dashboard',
          component: () => import('../views/HomeView.vue'),
          meta: {
            title: '首页',
            icon: 'House',
          }
        },
        {
          path: 'system/UserManage',
          name: 'user-manage',
          component: () => import('../views/system/UserManage.vue'),//用户管理
          meta: {
            title: '用户管理',
            hidden: false,
            alwaysShow: true,//是否在菜单栏显示路由
            roles: [1,2,2013], // 允许访问的角色
            permissions: ['user:add', 'user:edit', 'user:delete', 'user:view'] // 用户管理的增删改查权限
          },
        },
        {
          path: 'system/RoleMessage',
          name: 'role-message',
          component: () => import('../views/system/RoleMessage.vue'),//角色管理
          meta: {
            title: '角色管理',
            icon: 'Role',
            roles: [1,2,8], // 只允许管理员和销售总监访问
            permissions: ['role:add', 'role:edit', 'role:delete', 'role:view'] // 角色管理的增删改查权限
          },
        },
        {
          path: 'system/DepartmentManage',
          name: 'department-manage',
          component: () => import('../views/system/DepartmentManage.vue'),//部门管理
          meta: {
            title: '部门管理',
            icon: 'Department',
            roles: [1,2,1007],//1007是部门经理
            permissions: ['department:add', 'department:edit', 'department:delete', 'department:view'] // 部门管理的增删改查权限
          }
        },
        {
          path: 'menu/MenuManagement',
          name: 'MenuManagement',
          component: () => import('@/views/menu/MenuManagement.vue'),
          meta: {
            title: '菜单管理',
            requiresAuth: true
          }
        },
        {
          path: 'menu/OperationLog',
          name: 'OperationLog',
          component: () => import('@/views/menu/OperationLog.vue'),
          meta: {
            title: '操作日志',
            requiresAuth: true,
            roles: [1, 2] // 只允许管理员访问
          }
        },
        {
          path: 'meeting/MeeingRoom',//会议室管理
          name: 'room-manage',
          component: () => import('../views/meeting/MeeingRoom.vue'),
          meta: {
            title: '会议室管理',
            icon: 'Meeting',
            roles: [1,2,2011],//2011是产品经理
            permissions: ['room:add', 'room:edit', 'room:delete', 'room:view'] // 会议室管理的增删改查权限
          }
        },
        {
          path: 'meeting/MeetingYuyue',
          name: 'room-reservation-manage',
          component: () => import('../views/meeting/MeetingReservation.vue'),//会议预约管理
          meta: {
            title: '会议预约管理',
            icon: 'Calendar',
            roles: [1,2],
            permissions: ['meeting:add', 'meeting:edit', 'meeting:delete', 'meeting:view'] // 会议预约的增删改查权限
          }
        },
        {
          path: 'meeting/MeetingApproval',
          name: 'meeting-approval',
          component: () => import('../views/meeting/MeetingApproval.vue'),//会议审批管理
          meta: {
            title: '会议审批管理',
            icon: 'Approval',
            roles: [1,2],
            permissions: ['meeting:approve', 'meeting:view'] // 会议审批的权限
          }
        },
      ],
    },
    // 404页面
    {
      path: '/:pathMatch(.*)*',
      name: 'not-found',
      component: () => import('../views/NotFound.vue')
    }
  ],
})

// 全局前置守卫，实现权限控制
router.beforeEach((to, from, next) => {
  // 获取用户信息，包括角色和权限
  const userStore = localStorage.getItem('user_info')
  const userInfo = userStore ? JSON.parse(userStore) : null
  
  // 打印用户信息，便于调试
  console.log('路由守卫 - 用户信息:', userInfo)
  
  // 处理token过期或无效的情况
  if (userInfo && userInfo.Token) {
    // 这里可以添加token验证逻辑
    const tokenExpired = false // 可以根据实际情况检查token是否过期
    
    if (tokenExpired) {
      // 如果token过期，清除用户信息并重定向到登录页
      localStorage.removeItem('user_info')
      localStorage.removeItem('access_token')
      if (to.path !== '/' && to.path !== '/login' && to.path !== '/register') {
        ElMessage.error('登录已过期，请重新登录')
        next('/')
        return
      }
    }
  }
  
  // 如果是登录或注册页面
  if (to.path === '/' || to.path === '/login' || to.path === '/register') {
    // 未登录状态访问登录页，直接放行
    if (!userInfo || !userInfo.Token) {
      next()
      return
    }
    
    // 如果用户已登录且尝试访问登录页
    // 但如果用户是从其他页面点击"退出登录"过来的，允许访问登录页
    if (from.path.includes('/index')) {
      // 清除用户信息
      localStorage.removeItem('user_info')
      localStorage.removeItem('access_token')
      // 放行到登录页
      next()
    } else {
      // 否则重定向到首页
      next('/index/dashboard')
    }
    return
  }
  
  // 如果用户未登录，重定向到登录页
  if (!userInfo || !userInfo.Token) {
    next('/')
    return
  }
  
  // 如果路由没有meta或没有权限控制，直接放行
  if (!to.meta || (!to.meta.roles && !to.meta.permissions)) {
    next()
    return
  }
  
  // 获取用户角色ID
  // 兼容两种可能的属性名：RoleId 和 role
  const userRoleId = userInfo.RoleId || userInfo.role || 0
  
  console.log('用户角色ID:', userRoleId)
  console.log('路由要求角色:', to.meta.roles)
  
  // 超级管理员(角色ID为1或2)可以访问所有页面
  if ([1, 2].includes(Number(userRoleId))) {
    console.log('超级管理员，允许访问所有页面')
    next()
    return
  }
  
  // 使用数组包含方法判断用户角色是否满足权限要求
  const hasRole = !to.meta.roles || 
    (Array.isArray(to.meta.roles) && to.meta.roles.includes(Number(userRoleId)))
    
  // 检查功能权限 - 后续可以从pinia store中获取完整权限
  // 这里暂时保持简单，只检查角色
  const hasPermission = !to.meta.permissions
  
  // 如果有权限，放行；否则重定向到首页
  if (hasRole && hasPermission) {
    next()
  } else {
    console.warn('用户无权访问该页面:', to.path, '用户角色:', userRoleId)
    ElMessage.warning('您没有权限访问该页面')
    next('/index/dashboard') // 或者显示无权限页面
  }
})

export default router
